<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>盛筑办公平台安装</title>
	<link rel="stylesheet" href="./lib/layui/css/layui.css">
	<link rel="stylesheet" href="./kaige/css/index.css">
</head>

<body>
	<svg id="ckLine" class="ckLine" xmlns="http://www.w3.org/2000/svg"></svg>
	<div class="azbox">
		<div class="azbox-header">
			<div class="logo"></div>
			<div class="title">盛筑办公平台安装向导</div>
			<div class="vertxt">版本号<span id="version-txt"></span></div>
		</div>
		<div class="azbox-body" id="azbox-body"></div>
		<div class="footer">
			<p class="f11">© 2022-2023 泉州市盛筑信息科技有限公司 版权所有</p>
		</div>
	</div>
	<script type="text/html" id="step0">
		<div class="content">
			<div id="license" class="layui-code">
				<p>本协议是您与泉州市盛筑信息科技有限公司共同签署。</p>
				<p class="pb">盛筑办公平台（以下称“盛筑办公”），由泉州市盛筑信息科技有限公司（以下称“盛筑信息科技”）独创开发，版权所有 Copyright © 2022
					盛筑信息科技保留所有权利。盛筑办公是国内最稳定、最强大、最先进的互联网办公平台解决方案之一，盛筑办公基于 PHP + MySQL 的技术，采用ThinkPHP框架开发。盛筑办公官方对此拥有最终修改权和解释权。</p>
				<p>官方网站：<a href="http://www.shengzhuoa.com" target="_blank">www.shengzhuoa.com</a></p>
				<p>预览地址：<a href="http://oa.shengzhuoa.com" target="_blank">oa.shengzhuoa.com</a></p>
				<p class="pb">
					在使用盛筑办公平台（以下称“许可软件”或“本软件”）之前，请您仔细阅读本协议，特别是法律适用和争议解决条款，此等条款将以粗体标识，您需要重点阅读。如您对协议有任何疑问，可向客服咨询。如果您已下载、复制、安装或以其他任何方式使用该软件，则视为已经接受本协议。如果您不接受本协议的全部或部分条款，您将无权使用本软件。请立即终止安装、或以其他方式使用该软件，删除您已经安装或保留的该软件的任何组件。
				</p>
				<p>由于互联网高速发展，您与我们签署的本协议列明的条款并不能完整罗列并覆盖您与我们所有权利与义务，现有的约定也不能保证完全符合未来发展的需求。
					因此，《版权声明》及其他规则均为本协议的补充协议，与本协议不可分割且具有同等法律效力。如您使用许可软件，视为您同意上述补充协议。我们如修改本协议或其补充协议，协议条款修改后，请您仔细阅读并接受修改后的协议后再继续使用许可软件。
				</p>
				<p class="pb">一、定义</p>
				<p>
					软件（许可软件或本软件）：本协议中的“软件”是指盛筑办公平台，由若干模块或功能组成的已经植入或即将植入盛筑信息科技指定产品内的信息处理程序或支持文件，其中支持文件具体包括软件的源代码、目标码以及相关软件中所包含的图片、照片、图标、动画、录音、录像、音乐、文字、代码的全部或部分，还包括与许可软件或盛筑信息科技产品相关的所有描述其功能、特点、内容、质量、测试、用户手册、用户许可协议等纸质或电子版的资料、技术文档等。
				</p>
				<p>您：本协议中的“您”是指取得盛筑信息科技合法许可使用本软件权利的个人或单个法人实体，法人实体包括公司、企业、机构、组织或单位。</p>
				<p>我们：本协议中的“我们”即是盛筑办公官方，是指盛筑信息科技，即泉州市盛筑信息科技有限公司及其关联公司。</p>
				<p>二次开发：本协议中的“二次开发”在现有的软件上进行定制修改，如对功能扩展，达到您想要的功能，原则不得改变本软件原有系统内核及系统设定的框架，我们允许的二次开发仅指对部分软件界面、功能删改或扩展，并非对内核及框架进行实质性修改。
				</p>
				<p class="pb">二、软件许可使用内容</p>
				<p>在您遵守本协议内容的前提下，您通过我们指定合法渠道购买软件商用许可后，盛筑信息科技授予您的商用许可权利包括：</p>
				<p>1、安装和使用权利：您可以为商用目的安装和使用本软件，使用本软件提供的全部功能。</p>
				<p>
					2、绑定唯一域名的权利：在安装本软件前，您应当自备一个域名并告知我们，以便我们将域名与本软件进行绑定。该绑定域名是商用许可软件的唯一指向。您应确保域名的唯一性、有效性，域名一经绑定，不得随意更换。您自备的域名可以是顶级、二级、或三级域名，您应对域名合法性、有效性承担责任。在使用本软件过程中，如需更换域名，应提前三个工作日以书面方式告知我们并如实告知被更换域名存在的问题，否则，我们有权利不予更换。
				</p>
				<p>3、申请商用授权码的权利：您在我们指定合法渠道购买软件商用许可后，凭借订单号可以在我们官网申请商用授权码，并通过我们官方网站下载授权证书。</p>
				<p>4、获取商用授权证书的权利：通过我们官方网站下载的商用授权证书是许可您将软件商用的合法凭证。该授权证书是授予您以本协议约定方式合法使用软件的永久授权，但我们不对授权作无限制使用的永久承诺。</p>
				<p>5、授权内容使用权：在取得我们许可后，您拥有使用本软件构建的网站全部内容使用权，并独立承担与之相关法律义务。您可以在协议规定的约束条件下和限制范围内修改 盛筑办公
					源代码或界面风格以适应您的网站要求，但应保留我们的版权信息。不管你的网站是否整体使用 盛筑办公 ，还是部份栏目使用 盛筑办公，在你使用了 盛筑办公 的网站主页上必须加上 盛筑办公
					官方网址(www.shengzhuoa.com)的链接。</p>
				<p>6、在获得商业授权之后，您才可以将本软件应用于商业用途，同时依据所购买的授权类型确定技术支持内容。商业授权用户享有反馈意见和提出建议的权力，相关意见和建议将在我们下一次软件升级中被优先考虑，但我们对此不作承诺或保证。</p>
				<p>7、盛筑办公著作权已在中华人民共和国国家版权局注册(中国国家版权局著作权登记号
					2022SR0716145)，著作权受到法律和国际公约保护。未经我们书面许可，不得删除网站底部及相应的官方链接。购买商业授权请联系盛筑信息科技了解最新说明。</p>
				<p>8、本软件适用运营环境，在软件相关文档中已经明确提示，如因软件安装不符运营环境造成的故障，我们不承担任何责任。</p>
				<p class="pb">三、权利限制</p>
				<p>1、单一使用限制：同一个域名，只允许绑定一次。您购买的许可，只允许您自己使用，不得再许可任何第三人使用。</p>
				<p>2、共享软件限制：您不得通过共享软件的全部或部分，允许多人使用软件的部分或全部功能。</p>
				<p>3、软件分解限制：您不得通过分解软件，把不同功能或把软件的不同部分嵌入到其他软件系统。</p>
				<p>4、软件完整性限制：您不得删除软件中的任何版权申明、提示，亦不得对软件中出现的任何商标或标识进行涂抹、修改或删除，除非已经获得我们的书面同意，您应将需要修改的标识等详细情况书面告知我们，以便我们评估您的需要。</p>
				<p>5、反向工程、反编译、反汇编限制：您不得对软件进行反向工程、反编译、反汇编，除非法律明确规定允许这些行为除外。</p>
				<p>6、转让限制：未经盛筑信息科技的书面同意，您不得公开、转让、出租、出借、再许可、分发该软件的全部或任何部分或软件单一备份副本给第三方。</p>
				<p>7、保密限制：未经盛筑信息科技书面同意，您不得将本软件的性能或其他任何评估、测试结果、技术秘密透露给任何第三方。</p>
				<p class="pb">四、权利保留</p>
				<p>1、盛筑信息科技依法保留未在本协议中明确授予给您的其他一切在法律上属于盛筑信息科技的权利。</p>
				<p>2、本软件受著作权法、国际著作权条约和其他的知识产权法律或国际条约保护。根据本协议，在此仅许可您非独占性的、非排他性的一般许可使用该软件的权利，而不是出售或转让。</p>
				<p>3、商标权：本协议不授予您盛筑信息科技或其供应商的任何商标或服务标志相关的任何权利。</p>
				<p>4、本软件所涉及到的一切知识产权，包括但不限于专利权、著作权、商标权、商业秘密、技术秘密，均属于各自内容拥有者的财产，盛筑信息科技保留从其所拥有的知识产权获取利益的权利。</p>
				<p>5、未经我们书面许可，不得对本软件或与之关联的商业授权进行出租、出售、抵押或发放子许可证。</p>
				<p>6、未经我们书面许可，禁止在 盛筑办公 的整体或任何部分基础上以发展任何派生版本、修改版本或第三方版本用于重新分发。</p>
				<p>7、您一旦开始确认本协议并安装
					盛筑办公，即被视为完全理解并接受本协议的各项条款，在享有上述条款授予的权力的同时，受到相关的约束和限制。协议许可范围以外的行为，将直接违反本授权协议并构成侵权，我们有权立即终止授权，责令停止损害，并保留追究相关责任的权力。
				</p>
				<p class="pb">五、知识产权</p>
				<p>1、我们拥有许可软件的著作权、商业秘密以及其他相关的知识产权，包括与许可软件有关的各种文档资料。许可软件的相关标识属于我们及我们的关联公司的知识产权，并受到相关法律法规的保护。</p>
				<p>2、在未获得我们明确同意前，您不得复制、模仿、使用或发布上述图标，也不得修改或删除应用产品中体现我们及其关联公司的任何标识、图标或身份信息。</p>
				<p>3、未经我们及我们的关联公司事先书面同意，您不得为任何营利性或非营利性的目的自行实施、利用、转让或许可任何第三方实施、利用、转让上述知识产权。</p>
				<p>4、除非在此明确地许可或授予，本协议并不涉及任何技术转让，软件里所包含和涉及所有权利，产权和利益属于我们独自所有。除非在此明确地许可，本合同并不将任何技术转让给您。</p>
				<p class="pb">六、升级版本</p>
				<p>1、我们会根据需要在后续进行一系列免费升级操作，您只有在获得商业使用授权许可后，才享有软件免费升级权益。我们有权决定将升级包何时以何种方式发送给您。</p>
				<p>2、升级版本的许可：如果该软件经盛筑信息科技同意升级，除非升级版本有替代的软件许可协议，否则升级版本仍应遵循本协议条款。</p>
				<p>3、不论软件是否升级，您必须遵守本协议。</p>
				<p class="pb">七、无担保和责任限制</p>
				<p>1、除盛筑信息科技明确明示保证的事项以外，对其他任何默示、特定用途、适销性不做任何默示或明示的保证，由此引起的风险由您自己承担。</p>
				<p>2、有关本软件在使用过程中存在不适用性情况，您应当立即以书面方式反馈给我们，在我们现有技术可以解决的情况下，将依照盛筑信息科技的软件产品标准保修政策规定。</p>
				<p> 1)盛筑信息科技不对试用期及免费试用软件因使用而产生的损失承担任何明示或暗示的责任。</p>
				<p> 2)盛筑信息科技承担的所有责任以您购买该软件所支付的价款为限。</p>
				<p>
					3、对因意外事故、滥用、错误使用、擅自修改所引起的软件使用问题，我们不承担任何责任，也不做任何保证。对因软件产品存在被攻击，或者自然灾害等不可抗力因素或非盛筑信息科技原因导致软件不能使用，或造成损失的，我们不承担任何责任，也不做任何保证。
				</p>
				<p>4、对因使用软件引起的其他任何附带的、间接的或惩罚性的损失，包括但不限于商业利润的损失、信息或数据的丢失，盛筑信息科技不承担任何责任，即使盛筑信息科技已被告知存在此种损害的可能性也不例外。</p>
				<p>
					5、除法律法规有明确规定外，我们将尽最大努力确保许可软件及其所涉及的技术及信息安全、有效、准确、可靠，但受限于我们现有技术，您充分理解我们不能对此进行担保。您理解，对于因您自身、不可抗力及第三方原因导致的您的直接或间接损失，我们无法承担责任。
				</p>
				<p>
					6、由于您因下述任一情况所引起或与此有关的人身伤害或附带的、间接的损害赔偿，包括但不限于利润损失、资料损失、业务中断的损害赔偿或其他商业损害赔偿或损失，需由您自行承担：使用或未能使用许可软件；第三方未经批准的使用许可软件或更改您的数据；使用许可软件进行的行为产生的费用及损失；您对许可软件的误解；非因我们的原因而引起的与许可软件有关的其他损失。
				</p>
				<p>
					7、非经我们或我们授权开发并正式发布的其他任何由许可软件衍生的软件均属非法，下载、安装、使用此类软件，或未经绑定唯一指向域名，可能导致不可预知的风险，由此产生的法律责任与纠纷与我们无关，我们有权中止、终止使用许可和（或）其他一切服务。
				</p>
				<p>8、您与其他使用许可软件的用户之间通过许可软件进行时，因您受误导或欺骗而导致或可能导致的任何心理、生理上的伤害以及经济上的损失，均应由侵权方依法承担所有责任。</p>
				<p class="pb">八、保密条款</p>
				<p>双方都应为可能获知另一方的商业计划、客户方资料、技术、产品、代码、文档和其他作为该方商业秘密的秘密信息予以保密。秘密信息包括所有有形的或无形的、标明为秘密的信息。秘密信息归披露方所有，除非经披露方声明许可否则不得披露或使用。
				</p>
				<p class="pb">九、协议终止和违约责任</p>
				<p>
					1、如果您没有遵守本协议的部分或全部条款，盛筑信息科技可以随时单方终止本协议。协议终止后，我们将取消对您的商用许可授权，同时您必须立即停止使用该软件，对已经安装的软件进行卸载，如果由于您违反了本协议的规定给盛筑信息科技造成损失，应承担损失赔偿责任。
				</p>
				<p>2、您应理解按授权范围使用许可软件、尊重软件及软件包含内容的知识产权、按规范使用软件、按本协议约定履行义务是您获取我们授权使用软件的前提，如您违反本协议，我们有权终止使用许可。</p>
				<p>3、您对软件的使用有赖于我们及关联公司为您提供的配套服务，您违反与我们或我们关联公司的条款、协议、规则、通告等相关规定，我们有权终止使用许可。您违反了本协议的规定给盛筑信息科技造成损失，应承担给我们造成损失的赔偿责任。</p>
				<p>
					4、您理解出于维护软件系统及软件平台秩序的目的，如果您向我们及（或）我们的关联公司作出任何形式的承诺，且相关公司已确认您违反了该承诺并通知我们依据您与其相关约定进行处理的，则我们可按您的承诺或协议约定的方式对您的使用许可及其他我们可控制的权益采取限制措施，包括中止或终止对您的使用许可，并追究您相关法律责任的权利。
				</p>
				<p>5、您如从获得我们授权认可的第三方取得许可软件，您需要遵守本协议及第三方对您使用许可软件方式与限制的约定，如果您违反本协议及与第三方约定，我们有权终止对您的使用许可，并追究您相关法律责任。</p>
				<p>
					6、您应对从本软件获得的代码、文档等技术信息保密，不得对源代码、文档及框架进行删改，不得破译加密部分，不得非法进行倒卖本软件，我们不对非法软件使用后果承担任何责任，并有权追究您的法律责任，您应当赔偿因您的侵权行为给我们造成的直接和间接损失。
				</p>
				<p>
					7、如您违反本协议规定的条款，则构成违约，应当承担软件销售价格十倍至五十倍不等的违约金，如给我们或其他用户造成损失的，您必须承担全部的赔偿责任（包括直接损失和间接损失），包括但不限于咨询费、诉讼费、执行费、保全费、保险费、律师费等费用。
				</p>
				<p class="pb">十、管辖法律及可分割性</p>
				<p class="pb">
					1、本协议之效力、解释、变更、执行与争议解决均适用中华人民共和国法律，如无相关法律规定的，则应参照通用国际商业惯例和（或）行业惯例。本协议由您与我们于我们服务器所在地福建省泉州市签署。因本协议产生或与本协议有关的争议，您可与我们以友好协商，协商不成时，提交泉州仲裁委员会予以裁决。仲裁裁决是终局的，对双方均有拘束力。
				</p>
				<p>2、本协议任何条款被认定为无效的，不应影响其他条款或其任何部分的效力，您与我们仍应善意履行。</p>
				<p class="pb">十一、其他</p>
				<p>1、本协议未约定的，由双方另行商定。</p>
				<p>2、本协议的所有标题仅是为了醒目及阅读方便，本身并没有实际涵义，不能作为解释本协议涵义的依据。（正文完）</p>
				<p>泉州市盛筑信息科技有限公司</p>
			</div>
		</div>
		<div class="az-foot">
			<button type="button" id="bottomOpt" class="layui-btn layui-btn-radius layui-btn-disabled" title="需要阅读全文">同意接受本协议并继续安装 <span class="waitmm">60</span></button>
		</div>
	</script>
	<script type="text/html" id="step1">
		<div class="content">
			<div class="stepbox">
				{{- d.stepul }}
				<div class="step-content">
					<div class="step-item step-show">
						<div class="step-item-content">
							<form class="layui-form form-body layui-form-pane" lay-filter="form-dbset">
							<fieldset style="margin: 10px;">
								<legend>Redis 配置</legend>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">服务器地址</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.redis.host }}" name="redis_host" id="redis_host" required lay-verify="required" placeholder="请输入Redis服务器" autocomplete="off" class="layui-input">
									</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">端口</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.redis.port }}" name="redis_port" id="redis_port" required lay-verify="required" placeholder="请输入Redis端口" autocomplete="off" class="layui-input">
									</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label">Redis密码</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.redis.password }}" name="redis_pwd" placeholder="请输入Redis密码" autocomplete="off" class="layui-input">
									</div>
								</div>
							</fieldset>
							<fieldset style="margin: 10px;">
								<legend>MySql 配置</legend>
								<input type="hidden" name="onlydb_id" value="{{ d.onlydb.id }}" >
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">服务器地址</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.onlydb.host }}" name="onlydb_host" required lay-verify="required" placeholder="请输入服务器地址" autocomplete="off" class="layui-input">
									</div>
									<label class="layui-form-label fl-red">端口</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.onlydb.port }}" name="onlydb_port" required lay-verify="required" placeholder="请输入端口" autocomplete="off" class="layui-input">
									</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">数据库用户</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.onlydb.user }}" name="onlydb_user" required lay-verify="required" placeholder="请输入数据库用户名" autocomplete="off" class="layui-input">
									</div>
									<label class="layui-form-label fl-red">数据库密码</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.onlydb.password }}" name="onlydb_pwd" required lay-verify="required" placeholder="请输入数据库密码" autocomplete="off" class="layui-input">
									</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">数据库名称</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.onlydb.dbname }}" name="onlydb_name" required lay-verify="required" placeholder="请输入数据库名称" autocomplete="off" class="layui-input">
									</div>
									<label class="layui-form-label fl-red">数据表前缀</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.onlydb.prefix }}" name="onlydb_prefix" required lay-verify="required" placeholder="请输入数据表前缀" autocomplete="off" class="layui-input">
									</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">管理员帐号</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.onlydb.username }}" name="onlydb_user_account" required lay-verify="required" placeholder="请输入管理员帐号" autocomplete="off" class="layui-input">
									</div>
									<label class="layui-form-label fl-red">管理员密码</label>
									<div class="layui-input-inline">
										<input type="text" value="{{ d.onlydb.userpwd }}" name="onlydb_user_pwd" required lay-verify="required" placeholder="请输入管理员密码" autocomplete="off" class="layui-input">
									</div>
								</div>
							</fieldset>
						</form>
							<fieldset style="margin: 10px;">
								<legend>运行环境检测</legend>
								<table class="layui-table">
									<thead>
										<tr>
											<th class="th01">环境检测</th>
											<th class="th02">推荐配置</th>
											<th class="th03">最低要求</th>
											<th class="th04">当前状态</th>
										</tr>
									</thead>
									<tbody>
										{{# layui.each(d.env_list,function(index,item){ if(item.icon!=1){azerr++}; }}
										<tr>
											<td>{{item.name}}</td>
											<td>{{item.reco}}</td>
											<td>{{item.need}}</td>
											<td>{{- (item.icon ==1 ? '<i class="layui-icon layui-icon-ok txt-green"></i>':'<i class="layui-icon layui-icon-close txt-red"></i>') }} {{item.res}}</td>
										</tr>
										{{# }); }}
									</tbody>
								</table>
							</fieldset>
							<fieldset style="margin: 10px;">
								<legend>目录、文件权限检查</legend>
								<table class="layui-table">
									<thead>
										<tr>
											<th class="th01">目录/文件</th>
											<th class="th02">推荐配置</th>
											<th class="th03">写入</th>
											<th class="th04">读取</th>
										</tr>
									</thead>
									<tbody>
										{{# layui.each(d.dir_file,function(index,item){ if(item.icon_w!=1 || item.icon_r!=1){azerr++}; }}
										<tr>
											<td>{{item.name}}</td>
											<td>{{item.reco}}</td>
											<td>{{- (item.icon_w ==1 ? '<i class="layui-icon layui-icon-ok txt-green"></i>':'<i class="layui-icon layui-icon-close txt-red"></i>') }} {{item.res_w}}</td>
											<td>{{- (item.icon_r ==1 ? '<i class="layui-icon layui-icon-ok txt-green"></i>':'<i class="layui-icon layui-icon-close txt-red"></i>') }} {{item.res_r}}</td>
										</tr>
										{{# }); }}
									</tbody>
								</table>
							</fieldset>
							<fieldset style="margin: 10px;">
								<legend>函数依赖性检查</legend>
								<table class="layui-table">
									<thead>
										<tr>
											<th class="th01">函数</th>
											<th class="th02">建议</th>
											<th class="th03">需求</th>
											<th class="th04">检测结果</th>
										</tr>
									</thead>
									<tbody>
										{{# layui.each(d.func_list,function(index,item){ if(item.jctg!=1){azerr++}; }}
										<tr>
											<td>{{item.name}}</td>
											<td>{{item.reco}}</td>
											<td>{{item.need}}</td>
											<td>{{- (item.icon ==1 ? '<i class="layui-icon layui-icon-ok txt-green"></i>':'<i class="layui-icon layui-icon-close txt-red"></i>') }} {{item.res}}</td>
										</tr>
										{{# }); }}
									</tbody>
								</table>
							</fieldset>
						</div>
						<div class="step-item-footer">
							<button type="button" class="layui-btn layui-btn-radius layui-btn-normal" id="prevBtn1">上一步</button>
							<button type="button" class="layui-btn layui-btn-radius layui-btn-normal" id="nextBtn1">下一步</button>
						</div>
					</div>
				</div>
			</div>
		</div>
	</script>
	<script type="text/html" id="step2">
		<div class="content">
			<div class="stepbox">
				{{- d.stepul }}
				<div class="step-content">
					<div class="step-item step-show">
						<div class="step-item-content">
							<form class="layui-form form-body layui-form-pane" lay-filter="step-bind">
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">绑定域名</label>
									<div class="layui-input-inline">
										<input type="text" name="domain" id="domain" value="{{ window.location.host }}" required lay-verify="domain" placeholder="请输入绑定域名" autocomplete="off" class="layui-input">
									</div>
									<div class="layui-form-mid layui-word-aux">如：oa.shengzhuoa.com</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">单位名称</label>
									<div class="layui-input-inline">
										<input type="text" name="company_name" id="company_name" required lay-verify="required" placeholder="请输入单位名称" autocomplete="off" class="layui-input">
									</div>
									<div class="layui-form-mid layui-word-aux">个人或企业名称</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">联系人</label>
									<div class="layui-input-inline">
										<input type="text" name="real_name" id="real_name" required lay-verify="required" placeholder="请输入联系人" autocomplete="off" class="layui-input">
									</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">手机号</label>
									<div class="layui-input-inline">
										<input type="number" name="mobile" id="mobile" required lay-verify="mobile" placeholder="请输入手机号码" autocomplete="off" class="layui-input">
									</div>
									<div class="layui-form-mid layui-word-aux">个人或企业法人手机号码</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">验证码</label>
									<div class="layui-input-inline" style="min-width: 100px;width: 150px;">
										<input type="text" name="captcha" maxlength="6" id="captcha_ipt" required lay-verify="required" placeholder="请输入验证码" autocomplete="off" class="layui-input">
									</div>
									<div class="layui-input-inline">
										<img src="" id="captcha_img" onclick="setCaptcha()" title="点击更换验证码" alt="captcha" style="width:100%;height:38px; cursor:pointer;" />
										<input type="hidden" id="captcha_key" name="key">
									</div>
								</div>
								<div class="layui-form-item">
									<label class="layui-form-label fl-red">短信验证码</label>
									<div class="layui-input-inline" style="min-width: 100px;width: 150px;">
										<input type="text" name="smscode" id="smscode" maxlength="6" required lay-verify="required" placeholder="请输入短信验证码" autocomplete="off" class="layui-input">
									</div>
									<div class="layui-input-inline">
										<button type="button" class="layui-btn layui-btn-radius layui-btn-normal layui-btn-sm" id="sendsms" style="margin-top: 3px;">
											<i class="layui-icon layui-icon-release layui-font-12"></i> 发送短信验证码 <span id="miaotext"></span>
										</button>
									</div>
								</div>
							</form>
						</div>
						<div class="step-item-footer">
							<button type="button" class="layui-btn layui-btn-radius layui-btn-normal" id="prevBtn2">上一步</button>
							<button type="button" class="layui-btn layui-btn-radius layui-btn-normal" id="nextBtn2">下一步</button>
						</div>
					</div>
				</div>
			</div>
		</div>
	</script>
	<script type="text/html" id="step3">
		<div class="content">
			<div class="stepbox">
				{{- d.stepul }}
				<div class="step-content">
					<div class="step-item step-show">
						<div class="step-item-content">
							<form class="layui-form form-body layui-form-pane" lay-filter="form-dbset">
								<fieldset style="margin: 10px;">
									<legend>站点信息</legend>
									<div class="layui-form-item">
										<label class="layui-form-label fl-red">域名</label>
										<div class="layui-input-inline">
											<input type="text" value="{{ d.domain }}" name="domain" required lay-verify="required" placeholder="请输入服务器地址" autocomplete="off" class="layui-input layui-disabled" disabled>
										</div>
										<label class="layui-form-label fl-red">手机号</label>
										<div class="layui-input-inline">
											<input type="text" value="{{ d.mobile }}" name="mobile" required lay-verify="required" placeholder="请输入端口" autocomplete="off" class="layui-input layui-disabled" disabled>
										</div>
									</div>
								</fieldset>								
							</form>
						</div>
						<div class="step-item-footer">
							<button type="button" class="layui-btn layui-btn-radius layui-btn-normal" id="prevBtn3">上一步</button>
							<button type="button" class="layui-btn layui-btn-radius layui-btn-normal" id="nextBtn3">开始安装</button>
						</div>
					</div>
				</div>
			</div>
		</div>
	</script>
	<script type="text/html" id="step4">
		<div class="content">
			<div class="stepbox">
				{{- d.stepul }}
				<div class="step-content">
					<div class="step-item step-show">
						<div class="step-item-content install">
							<div class="cont-body">
								<ul class="layui-timeline" id="installLog"></ul>
							</div>
						</div>
						<div class="step-item-footer">
							<button type="button" class="layui-btn layui-btn-radius layui-btn-normal" id="nextBtn4">
								<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i> 正在安装，请不要（离开或关闭或刷新）页面
							</button>
						</div>
					</div>
				</div>
			</div>
		</div>
	</script>
	<script type="text/html" id="step5">
		<div class="content">
			<div class="stepbox">
				{{- d.stepul }}
				<div class="step-content">
					<div class="step-item step-show">
						<div class="step-item-content">
							<div class="n-center">
								<div style="margin-top: 20px;"><img src="./kaige/img/logo.png" style="width: 128px; height: 128px;"></div>
								<p class="n-fih">
									恭喜您，已完成系统的全部安装！<br/>
									请删除相关安装文件，以免造成不必要的损失！
								</p>
							</div>
						</div>
						<div class="step-item-footer">
							<button type="button" class="layui-btn layui-btn-radius layui-btn-normal" id="start_use"><i class="layui-icon layui-icon-release"></i> 开始使用</button>
							<button type="button" class="layui-btn layui-btn-radius layui-btn-danger" id="del_install"><i class="layui-icon layui-icon-close"></i> 删除安装文件</button>
						</div>
					</div>
				</div>
			</div>
		</div>
	</script>
	<script type="text/html" id="hasbeen">
		<div class="content">
			<div class="n-center">
				<div style="margin-top: 20px;"><img src="./kaige/img/logo.png" style="width: 128px; height: 128px;"></div>
				<p class="n-fih">
					您已经安装过本系统！<br/>
					若要重新安装<br/>
					请先备份好数据！请先备份好数据！请先备份好数据！<br/>
					然后删除data目录下的 install.lock 文件，再安装！
				</p>
			</div>
		</div>
	</script>
	<script src="./lib/jquery/jquery.min.js"></script>
	<script src="./lib/layui/layui.js"></script>
	<script src="./kaige/js/ckline.js"></script>
	<script>
		layui.use(function () {
			var layer = layui.layer,
				$ = layui.$,
				laytpl = layui.laytpl,
				element = layui.element,
				form = layui.form,
				table = layui.table;
			var smsmiao = 60,
				smstime = null;

			var stepul = '<ul class="step step-arrow"><li><a>环境配置</a></li><li><a>云端注册</a></li><li><a>配置</a></li><li><a>安装</a></li><li><a>完成</a></li></ul>';

			function setCache(b, a, c) { c = void 0 === c ? 0 : c; try { var d = { data: a, time: Date.now() / 1e3, expire: c }; a = JSON.stringify(d); window.localStorage.setItem(b, a) } catch (e) { console.log("bbq") } } function getCache(b) { try { var a = window.localStorage.getItem(b), c = Date.now() / 1e3; return a ? ((a = JSON.parse(a)), a.expire && c - a.time > a.expire ? (window.localStorage.removeItem(b), !1) : a.data) : !1 } catch (d) { return !1 } } function delCache(b) { try { window.localStorage.removeItem(b) } catch (a) { } }
			//背景动画
			$("#ckLine").ckLine({
				leftRight: !1,
				strokeColor: "rgba(255,255,255,0.5)",
				strokeWidth: 2,
				interval: 1000,
				animateTime: 2000,
				animationTimeRange: [1000, 2000]
			});
			//更改验证码图片
			window.setCaptcha = function () {
				$("#captcha_ipt").val("");
				getCaptcha();
			};
			// 获取验证码
			function getCaptcha() {
				$.ajax({
					url: "/install/index/yuncode",
					async: !0,
					success: function (a) {
						a.status &&
							a.data.status &&
							($("#captcha_img").attr("src", a.data.data.img),
								$("#captcha_key").val(a.data.data.key));
					}
				});
			}

			//初始化-安装协议
			var azobj = $("#azbox-body");
			window.azerr = 0;
			var now_step = 0;
			now_step = getCache("installStep") / 1;
			switch (now_step) {
				case 0:
					toStep0();
					break;
				case 1:
					toStep1();
					break;
				case 2:
					toStep2();
					break;
				case 3:
					toStep3();
					break;
				case 4:
					toStep4();
					break;
				case 5:
					toStep5();
					break;
				case 9:
					toHasbeen();
					break;
				default:
					toStep0();
					break;
			}

			function toHasbeen() {
				var a = $("#hasbeen").html();
				laytpl(a).render({}, function (b) {
					azobj.empty().html(b);
					setCache("installStep", 9);
				});
			}
			function version() {
				$("#version-txt").html(getCache("szoa-version"));
			}
			function init() {
				window.waitnum = 60;
				layui.code({
					elem: '#license',
					header: true, copy: false, encode: false,
					height: "425px",
					ln: !1,
					title: "安装协议",
					about: "接受本协议才可以继续安装使用盛筑办公平台",
				});
				var a = $("#license").find(".layui-code-wrap"),
					b = $("#bottomOpt");
				a.scroll(function () {
					var c = a.prop("scrollHeight"),
						d = a.prop("scrollTop"),
						e = a.prop("clientHeight");
					//多减100，不然有误差，有些浏览器滚不到底
					(c - d - 100) <= e &&
						(b.removeClass("layui-btn-disabled"),
							b.addClass("layui-btn-danger"),
							b.off("click").on("click", function (f) {
								toStep1();
							}),
							window.clearTimeout(window.waittime),
							$('.waitmm').remove());
				});
				waitbtn();
			}
			function waitbtn() {
				window.waittime = setTimeout(function () {
					if (window.waitnum > 0) {
						waitnum--;
						$('.waitmm').html(waitnum);
						waitbtn();
					} else {
						var b = $("#bottomOpt");
						b.removeClass("layui-btn-disabled"),
							b.addClass("layui-btn-danger"),
							b.off("click").on("click", function (f) {
								toStep1();
							});
						window.clearTimeout(window.waittime);
						$('.waitmm').remove();
					}
				}, 1000);
			}
			function toStepBar(a) {
				$(".step").each(function () {
					var b = $(this),
						c = b.find("li").length,
						d = b.data("step");
					c =
						a > c
							? c
							: void 0 == a && void 0 == d
								? 1
								: void 0 == a && void 0 != d
									? d
									: a;
					b.find("li").removeClass("active");
					b.find("li:lt(" + c + ")").addClass("active");
				});
			}

			function toStep0() {
				$.ajax({
					type: "POST",
					url: "/install/index/index",
					data: {},
					dataType: "json",
					success: function (a) {
						console.log("-----start setp 1----------");
						console.log(a);
						if (a.status) {
							setCache("szoa-version", a.data.version);
							version();
							var b = $("#step0").html();
							laytpl(b).render(a.data, function (c) {
								azobj.empty().html(c);
								setCache("installStep", 0);
								init();
							});
						} else toHasbeen();
					},
					error: function (a) {
						console.log(a);
						layer.alert("\u51fa\u9519");
					}
				});
			}

			function toStep1() {
				version();
				$.ajax({
					type: "POST",
					url: "/install/index/step1",
					data: {},
					dataType: "json",
					success: function (a) {
						console.log(a);
						if (a.status) {
							var b = $("#step1").html();
							a.data.stepul = stepul;
							laytpl(b).render(a.data, function (c) {
								azobj.empty().html(c);
								setCache("installStep", 1);
								toStepBar(1);
								$("#prevBtn1").on("click", function (d) {
									toStep0();
								});
								$("#nextBtn1").on("click", function (d) {
									$("#prevBtn1")
										.off("click")
										.addClass("layui-btn-disabled")
										.attr("disabled", true);
									if (0 === azerr) {
										form.submit("form-dbset", function (data) {
											var field = data.field;
											$.ajax({
												type: "POST",
												url: "/install/index/writeenv",
												data: field,
												dataType: "json",
												success: function (rd) {
													if (rd.status) {
														layer.msg(rd.msg);
														toStep2();
													} else {
														layer.msg(rd.msg);
													}
												}
											});
										});
									} else {
										return layer.alert("\u68c0\u6d4b\u672a\u901a\u8fc7"), !1;
									}
									return false;
								});
							});
						} else layer.alert("\u51fa\u9519\uff1a" + a.msg);
					},
					error: function (a) {
						layer.alert("\u51fa\u9519\uff1a" + a.msg);
					}
				});
			}

			function toStep2() {
				version();
				var h = $("#step2").html();
				laytpl(h).render({ stepul: stepul }, function (k) {
					azobj.empty().html(k);
					setCache("installStep", 2);
					toStepBar(2);
					getCaptcha();
					form.verify({
						domain: [
							/^(([-\u4E00-\u9FA5a-z0-9]{1,63})\.)+([\u4E00-\u9FA5a-z]{2,63})\.?$/,
							"\u8bf7\u8f93\u5165\u8981\u7ed1\u5b9a\u7684\u57df\u540d"
						],
						mobile: [
							/^1[3-9]\d{9}$/,
							"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u53f7\u7801"
						]
					});
					var d = $("#sendsms"),
						e = $("#miaotext");
					d.on("click", function (a) {
						a = form.validate("#domain");
						var f = form.validate("#mobile"),
							g = form.validate("#captcha_ipt");
						a &&
							f &&
							g &&
							((a = form.val("step-bind")),
								(smsmiao = 60),
								d.addClass("layui-btn-disabled"),
								d.attr("disabled", !0),
								e.html(smsmiao),
								(smstime = setInterval(function () {
									0 < smsmiao
										? (e.html(smsmiao), smsmiao--)
										: (clearInterval(smstime),
											d.removeClass("layui-btn-disabled"),
											d.removeAttr("disabled"),
											e.html(""));
								}, 1e3)),
								$.ajax({
									url: "/install/index/yunsms",
									type: "POST",
									data: {
										domain: a.domain,
										mobile: a.mobile,
										captcha: a.captcha,
										key: a.key
									},
									success: function (b) {
										console.log(b);
										var c = b.data;
										b.status && c.status ? layer.msg(c.msg) : layer.msg(b.data.msg);
									}
								}));
					});
					$("#prevBtn2").on("click", function (a) {
						toStep1();
					});
					$("#nextBtn2").on("click", function (a) {
						a = form.validate("#domain");
						var f = form.validate("#mobile"),
							g = form.validate("#smscode");
						a &&
							f &&
							g &&
							((a = form.val("step-bind")),
								setCache("domain", a.domain),
								setCache("mobile", a.mobile),
								$.ajax({
									url: "/install/index/yunreguser",
									type: "POST",
									data: {
										domain: a.domain,
										mobile: a.mobile,
										smscode: a.smscode,
										company_name: a.company_name,
										real_name: a.real_name
									},
									success: function (b) {
										var c = b.data;
										b.status && c.status
											? (setCache("installID", c.data), toStep3())
											: layer.msg(c.msg);
									}
								}));
					});
				});
			}

			function toStep3() {
				version();
				var id = getCache("installID");
				if (void 0 == id || id == "") {
					layer.msg("不能跳过步骤2");
					toStep2();
					return false;
				}
				var rdata = {
					domain: getCache("domain"),
					mobile: getCache("mobile"),
					stepul: stepul
				}
				var a = $("#step3").html();
				laytpl(a).render(rdata, function (b) {
					azobj.empty().html(b);
					setCache("installStep", 3);
					toStepBar(3);
					$("#prevBtn3").on("click", function (c) {
						toStep3();
					});
					$("#nextBtn3").on("click", function (c) {
						$("#prevBtn3")
							.off("click")
							.addClass("layui-btn-disabled")
							.attr("disabled", true);
						form.submit("form-dbset", function (data) {
							var field = data.field;
							field.domain = field.domain ? field.domain : getCache("domain");
							field.mobile = field.mobile ? field.mobile : getCache("mobile");
							$.ajax({
								type: "POST",
								url: "/install/index/makeseting",
								data: field,
								dataType: "json",
								success: function (rd) {
									if (rd.status) {
										layer.msg("文件配置成功，开始安装...");
										toStep4();
									} else {
										layer.msg(rd.msg);
									}
								}
							});
						});
						return false;
					});
				});
			}

			function toStep4() {
				version();
				var a = $("#step4").html();
				laytpl(a).render({ stepul: stepul }, function (b) {
					azobj.empty().html(b);
					setCache("installStep", 4);
					toStepBar(4);
					reloads({ s: [1, 0, "", 0], ss: 0, status: -1 });
				});
			}

			function toStep5() {
				version();
				var a = $("#step5").html();
				laytpl(a).render({ stepul: stepul }, function (b) {
					azobj.empty().html(b);
					setCache("installStep", 5);
					toStepBar(5);
					$("#start_use").on("click", function (ev) {
						location.href = "/";
					});
					$("#del_install").on("click", function (ev) {
						layer.alert("请手动删除public/install与app/install目录");
					});
				});
			}

			Date.prototype.format = function (format) {
				var args = {
					"M+": this.getMonth() + 1,
					"d+": this.getDate(),
					"h+": this.getHours(),
					"m+": this.getMinutes(),
					"s+": this.getSeconds(),
					"q+": Math.floor((this.getMonth() + 3) / 3),
					S: this.getMilliseconds()
				};
				if (/(y+)/.test(format))
					format = format.replace(
						RegExp.$1,
						(this.getFullYear() + "").substr(4 - RegExp.$1.length)
					);
				for (var i in args) {
					var n = args[i];
					if (new RegExp("(" + i + ")").test(format))
						format = format.replace(
							RegExp.$1,
							RegExp.$1.length == 1 ? n : ("00" + n).substr(("" + n).length)
						);
				}
				return format;
			};

			function resli(d) {
				if (d.flag) {
					$cs = "layui-font-green";
					$csfa = "layui-icon-ok";
				} else {
					$cs = "layui-font-red";
					$csfa = "layui-icon-close";
				}
				return (
					'<li class="' +
					$cs +
					'">' +
					d.content +
					'<i class="layui-icon ' +
					$csfa +
					'"></i><i class="i-time">' +
					new Date().format("MM-dd hh:mm:ss") +
					"</i></li>"
				);
			}

			function rescontent(d) {
				if (d.flag) {
					$cs = "layui-font-green";
					$csfa = "layui-icon-ok";
				} else {
					$cs = "layui-font-red";
					$csfa = "layui-icon-close";
				}
				var shtml =
					'<li class="layui-timeline-item">\
	<i class="layui-icon layui-timeline-axis">&#xe63f;</i>\
	<div class="layui-timeline-content layui-text">\
		<h3 class="layui-timeline-title">' +
					d.title +
					'</h3>\
		<ul class="instlog" id="step_content_' +
					d.tid +
					'">\
			<li class="' +
					$cs +
					'">' +
					d.content +
					'<i class="layui-icon ' +
					$csfa +
					'"></i><i class="i-time">' +
					new Date().format("MM-dd hh:mm:ss") +
					"</i></li>\
		</ul>\
	</div>\
</li>";
				return shtml;
			}

			//开始安装
			function reloads(d) {
				$.ajax({
					type: "POST",
					url: "/install/index/installing",
					data: { s: d.s, ss: d.ss, status: d.status },
					dataType: "json",
					success: function (res) {
						if (res.content) {
							if (res.title == d.title) {
								$("#step_content_" + res.tid).append(resli(res));
							} else {
								$("#installLog").append(rescontent(res));
							}
							$(".install").scrollTop($(".install")[0].scrollHeight);
						}
						if (res.status == 0) {
							setTimeout(reloads(res), 1000);
						} else if (res.status == "finish") {
							$("#nextBtn4")
								.html("点击完成安装")
								.on("click", function (c) {
									toStep5();
								});
							layer.confirm("数据库创建成功！",{ icon: 3, title: "提示" },function (index) {
									toStep5();
									layer.close(index);
								}
							);
						} else if ((res.status = -2)) {
							layer.alert("出错啦");
						} else {
							return false;
						}
					}
				});
			}
		});

	</script>

</body>

</html>